const jwt = require('jsonwebtoken')
function sign(options,time){//options自己加的实际数据,自己找个独一无二的数据，不会被加密
    return jwt.sign(options,'666',{
        expiresIn:time||'24h'
    })
}
// 验证token是否正确
function verify(){
    //ctx最终为index.js中的use方法中的ctx参数
    //next为内置的，表示执行了app.use中的回调函数之后要运行一个next，这样后面的app.use()才会生效
    return async (ctx,next)=>{
        //1.获取请求头中的token
        const token = ctx.request.headers.authorization
        //2.验证token是否存在
        if(token){
            //3.验证token是否正确
            try{
                const decoded = jwt.verify(token,'666')//解密token
                //判断decoded是否存在，因为能解密成功，说明token没有过期，且有id属性
                if(decoded.id){
                    ctx.userId=decoded.id//将解密后的信息挂载到ctx.userId上
                    await next()//放行
                }
            }catch(error){//如果短token过期
                ctx.status=401
                ctx.body={
                    code:'0',
                    msg:'登录过期，请重新登录',
                }
            }
        }else{//如果短token不存在
            ctx.status=402
            ctx.body={
                code:'0',
                msg:'请先登录'
            }
        }
    }
}

// 校验返回的长token
function refreshVerify(token){
    try{
        const decoded = jwt.verify(token,'666')//解密token
        if(decoded.id){
            return decoded
        }
    }catch(error){
        return false
    }
}
module.exports={
    sign,
    verify,
    refreshVerify
}